//
//  VistorView.swift
//  xinlangweibo
//
//  Created by 刘亮 on 15/10/17.
//  Copyright © 2015年 liuliang. All rights reserved.
//

import UIKit

/// 访客视图 - 处理用户未登录界面的显示
class VistorView: UIView {
    
    //实现功能
    func setupInfo(imageName: String?, title: String){
     
        messageLabel.text = title
        
        //如果图片的名称为 nil , 说明是首页， 直接返回
        guard let imgName = imageName else{
        
            //播放动画
            startAnim()
            
            return
        }
        
        iconView.image = UIImage(named: imgName)
        
        //隐藏小房子
        homeiconView.hidden = true
        
        //将遮盖层移动到底层
        sendSubviewToBack(maskIconView)
        
    }
    
    //开启转轮动画
    private func startAnim(){
    
        let anim = CABasicAnimation(keyPath: "transform.rotation")
        
        anim.toValue = 2 * M_PI

        anim.repeatCount = MAXFLOAT
        
        anim.duration = 20
        
        // 用在不断重复的动画上， 当动画绑定的图层对应的视图被销毁， 动画会自动销毁
        // 完成之后不删除
        anim.removedOnCompletion = false
        
        //添加到图层
        iconView.layer.addAnimation(anim, forKey: nil)
        
        
    }
    
    // initWithFrame 是 UIView 的指定构造函数
    // 使用纯代码开发使用的入口
    override init(frame: CGRect) {
        
        super.init(frame: frame)
        
        setupUI()
        
    }

    // initwithCode - 使用 SB & XIB 开发加载的函数
    // 使用 sb 开发的入口
    required init?(coder aDecoder: NSCoder) {
        
        // 导致如果使用 SB 开发，调用这个视图，会直接崩溃
        // 这句话的意思就是 阻止使用 SB 使用当前的自定义视图
        // 如果只希望当前视图被纯代码加载，可以使用fataError
     //  fatalError("init(coder:) has not been implemented")
       super.init(coder: aDecoder)
        
        setupUI()
    }
    
    // MARK: - 懒加载控件
    // 创建 图标， 使用 image: 构造函数创建的 imageView 默认就是 image 的大小
    private lazy var iconView: UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_image_smallicon"))
    
    // 设置遮罩图片
    private lazy var maskIconView: UIImageView = UIImageView (image: UIImage(named: "visitordiscover_feed_mask_smallicon"))
    
    // 创建 小房子
    private lazy var homeiconView: UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_image_house"))
    
    // 创建 消息文字
    private lazy var messageLabel: UILabel = {
    
        let label = UILabel()
        
        label.text = "关注一些人，回这里看看有什么惊喜 关注一些人，回这里看看有什么惊喜"
        
        //界面设计上避免使用纯黑色
        label.textColor = UIColor.darkGrayColor()
        
        label.font = UIFont.systemFontOfSize(14)
        
        label.numberOfLines = 0
        
        // 这个是设置文本的对齐
        label.textAlignment = NSTextAlignment.Center
        
        return label
    }()
    
    private lazy var registerButton: UIButton = {
    
        let button = UIButton()
        
        button.setTitle("注册", forState: UIControlState.Normal)
        
        button.setTitleColor(UIColor.orangeColor(), forState: UIControlState.Normal)
        
        button.setBackgroundImage(UIImage(named: "common_button_white_disable"), forState: UIControlState.Normal)
    
        return button
    }()
    
    //登录按钮
    private lazy var loginButton: UIButton = {
    
        let button = UIButton()
        
        button.setTitle("登录", forState: UIControlState.Normal)
        
        button.setTitleColor(UIColor.orangeColor(), forState: UIControlState.Normal)
        
        button.setBackgroundImage(UIImage(named: "common_button_white_disable"), forState: UIControlState.Normal )
        
        return button
        
    }()
}

extension VistorView{

    /// 设置界面
    private func setupUI() {
        
        // 1. 添加控件
        addSubview(iconView)
        
        // 添加遮罩图片的位置，是在小房子的上面面
        addSubview(maskIconView)
        
        addSubview(homeiconView)
        
        addSubview(messageLabel)
        
        addSubview(registerButton)
        
        addSubview(loginButton)
        
        //2. 设置自动布局
        // 添加约束需要添加到父视图上
        
        // translatesAutoresizingMaskIntoconstraints 默认是 true, 支持设置使用 setFrame 的方式来设置控件的位置
        // false 支持使用自动布局来设置控件的位置，这里注意如下一定要加上这一句话，否则会报错
        // 如下如果每一个子视图都要下下面的一句话比较麻烦这里 可以放在一个for 循环中去遍历
        // iconView.translatesAutoresizingMaskIntoConstraints = false
        for v in subviews{
        
            v.translatesAutoresizingMaskIntoConstraints = false
        }
        
        // 1> 图标的 layout 位置设置
        addConstraint(NSLayoutConstraint(item: iconView, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1.0, constant: 0))
        
        addConstraint(NSLayoutConstraint(item: iconView, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1.0, constant: 0))
        
        // 2> 小房子 layout 位置设置
        addConstraint(NSLayoutConstraint(item: homeiconView, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1.0, constant: 0))
        
        addConstraint(NSLayoutConstraint(item: homeiconView, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1.0, constant: 0))
        
        // 3> 标签
        //注意 要参照的视图 是iconView
        addConstraint(NSLayoutConstraint(item: messageLabel, attribute: .CenterX, relatedBy: .Equal, toItem: iconView, attribute: .CenterX, multiplier: 1.0, constant: 0))
        
        addConstraint(NSLayoutConstraint(item: messageLabel, attribute: .CenterY, relatedBy: .Equal, toItem: iconView, attribute: .Bottom, multiplier: 1.0, constant: 16))
        
        addConstraint(NSLayoutConstraint(item: messageLabel, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 224))
        
        addConstraint(NSLayoutConstraint(item: messageLabel, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 36))
        
        // 4> 设置注册按钮
        addConstraint(NSLayoutConstraint(item: registerButton, attribute: .Left, relatedBy: .Equal, toItem: messageLabel, attribute: .Left, multiplier: 1.0, constant: 0))
        
        addConstraint(NSLayoutConstraint(item: registerButton, attribute: .Top, relatedBy: .Equal, toItem: messageLabel, attribute: .Bottom, multiplier: 1.0, constant: 16))
        
        addConstraint(NSLayoutConstraint(item: registerButton, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 100))
        
        addConstraint(NSLayoutConstraint(item: registerButton, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 36))
        
        // 5> 设置登录按钮
        addConstraint(NSLayoutConstraint(item: loginButton, attribute: .Right, relatedBy: .Equal, toItem: messageLabel, attribute: .Right, multiplier: 1.0, constant: 0))

        addConstraint(NSLayoutConstraint(item: loginButton, attribute: .Top, relatedBy: .Equal, toItem: messageLabel, attribute: .Bottom, multiplier: 1.0, constant: 16))
        
        addConstraint(NSLayoutConstraint(item: loginButton, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 100))
        
        addConstraint(NSLayoutConstraint(item: loginButton, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 36))
        
        // 6> 设置遮罩图层
        // 敲出来的是一个数组
        /**
        VFL: 可视化格式语言
        H : 水平方向
        V : 垂直方向
        | : 边界
        []: 包装控件
        views: 是一个字典[名字:控件名] - VFL字符串中表示控件的字符串
        
        */
        // Unable to parse constraint format:  这个错误不容易，解决方法： 注意一些细节的写法，一定不能出错，
        // 上述出错的原因是 分析不到语句中的约束的样式
        addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[mask]-0-|", options: [], metrics: nil, views: ["mask": maskIconView]))
        
        // 这里写竖直的时候需要添加一个括号
        addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[mask]-(btnHeight)-[regButton]", options: [], metrics: ["btnHeight": -36], views: ["mask": maskIconView,"regButton":registerButton]))
        
        // 设置背景颜色
        // 设置背景颜色，一般使用灰度图 R = G = B 在UI元素中，大多数都是用灰度图，或者是纯色图(安全色)。
        backgroundColor = UIColor(white: 237.0/255, alpha: 1.0)
        
    }


}
